package dao

import (
	__ "base_srv/basic/baseproto"
	"base_srv/handler/models"
	"errors"
	"fmt"
	"time"
)

// PlatformAdd 平台添加
func PlatformAdd(in *__.PlatformAddReq) (uint32, error) {
	// 打印原始时间用于调试
	fmt.Printf("原始时间字符串: %s\n", in.StartUpdateTime)
	// 定义时间解析格式
	timeFormat := "2006-01-02 15:04:05"

	// 解析时间，考虑可能的时区问题
	t, err := time.Parse(timeFormat, in.StartUpdateTime)
	if err != nil {
		// 提供更详细的错误信息，包括输入值和预期格式
		return 0, fmt.Errorf("时间解析失败，输入值: %s, 预期格式: %s, 错误: %w",
			in.StartUpdateTime, timeFormat, err)
	}

	// 如果确实需要固定减去8小时，建议添加注释说明原因
	// 例如：将UTC时间转换为北京时间（UTC+8），所以减去8小时
	p := models.Platform{
		PlatformName:    in.PlatformName,
		PlatformVersion: in.PlatformVersion,
		VersionCode:     in.VersionCode,
		UploadTime:      time.Now(),
		StartUpdateTime: t.Add(-time.Hour * 8), // 注意：硬编码时区偏移可能存在问题
		UserId:          uint32(in.UserId),
	}

	fmt.Printf("转换后存储的时间: %v\n", p.StartUpdateTime)

	if err = p.Create(); err != nil {
		return 0, fmt.Errorf("数据库存储失败: %w", err)
	}

	return p.Id, nil
}

// PlatformList 平台列表
func PlatformList() ([]*__.PlatformList, error) {
	var p models.Platform
	list, err := p.PlatformList()
	if err != nil {
		return nil, errors.New("查询失败" + err.Error())
	}

	var platformList []*__.PlatformList
	for _, v := range list {
		fmt.Println(v.RealName)
		l := __.PlatformList{
			Id:              int64(v.Id),
			PlatformName:    v.PlatformName,
			PlatformVersion: v.PlatformVersion,
			VersionCode:     v.VersionCode,
			UserName:        v.RealName,
			UploadTime:      v.UploadTime.Format("2006-01-02 15:04:05"),
			StartUpdateTime: v.StartUpdateTime.Format("2006-01-02 15:04:05"),
		}
		platformList = append(platformList, &l)
	}
	return platformList, nil
}

// PlatformUpdate 平台信息修改
func PlatformUpdate(in *__.PlatformUpdateReq) (uint32, error) {
	var t time.Time
	var err error
	if in.StartUpdateTime != "" {
		t, err = time.Parse(time.DateTime, in.StartUpdateTime)
		if err != nil {
			return 0, errors.New("时间格式错误")
		}
	}
	p := models.Platform{
		Id:              uint32(in.Id),
		PlatformName:    in.PlatformName,
		PlatformVersion: in.PlatformVersion,
		VersionCode:     in.VersionCode,
		UserId:          uint32(in.UserId),
		UploadTime:      time.Now(),
		StartUpdateTime: t.Add(-time.Hour * 8),
	}
	if err = p.PlatformUpdate(); err != nil {
		return 0, errors.New("修改失败" + err.Error())
	}
	return uint32(in.Id), nil
}

// PlatformUpdateWithOutFile 平台修改（无文件）
func PlatformUpdateWithOutFile(in *__.PlatformUpdateWithoutFileReq) (uint32, error) {
	var t time.Time
	var err error
	if in.StartUpdateTime != "" {
		t, err = time.Parse(time.DateTime, in.StartUpdateTime)
		if err != nil {
			return 0, errors.New("时间格式错误")
		}
	}
	p := models.Platform{
		Id:              uint32(in.Id),
		PlatformName:    in.PlatformName,
		PlatformVersion: in.PlatformVersion,
		VersionCode:     in.VersionCode,
		UserId:          uint32(in.UserId),
		StartUpdateTime: t.Add(-time.Hour * 8),
	}
	if err = p.PlatformUpdate(); err != nil {
		return 0, errors.New("修改失败" + err.Error())
	}
	return uint32(in.Id), nil
}

// 平台删除
func PlatformDel(id int) error {
	var p models.Platform
	p.Id = uint32(id)
	if err := p.PlatformDel(); err != nil {
		return errors.New("删除失败" + err.Error())
	}
	return nil
}
